/*-------------------------------------------------------------------------
 *
 * session.h
 *	  用户会话的封装
 *
 * Copyright (c) 2017-2022, PostgreSQL Global Development Group
 *
 * src/include/access/session.h
 *
 *-------------------------------------------------------------------------
 */
#ifndef SESSION_H
#define SESSION_H

#include "lib/dshash.h"

/* 避免包含typcache.h */
struct SharedRecordTypmodRegistry;

/*
 * 一个封装用户会话某些元素的结构。目前这
 * 管理适用于并行查询的状态，但原则上它可以
 * 包括其他当前是全局变量的东西。
 */
typedef struct Session
{
	dsm_segment *segment;		/* 会话范围的DSM段。 */
	dsa_area   *area;			/* 会话范围的DSA区域。 */

	/* 由typcache.c管理的状态。 */
	struct SharedRecordTypmodRegistry *shared_typmod_registry;
	dshash_table *shared_record_table;
	dshash_table *shared_typmod_table;
} Session;

extern void InitializeSession(void);
extern dsm_handle GetSessionDsmHandle(void);
extern void AttachSession(dsm_handle handle);
extern void DetachSession(void);

/* 当前会话，或无则为NULL。 */
extern PGDLLIMPORT Session *CurrentSession;

#endif							/* SESSION_H */
